//package org.ricks.rpc.asm;
//
//import org.ricks.common.asm.*;
//import java.lang.invoke.MethodHandle;
//import java.lang.invoke.MethodHandles;
//import java.util.Arrays;
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//
//import static org.ricks.common.asm.Opcodes.ASM9;
//
//public class AsmServiceInvoker {
//    private final Map<String, MethodHandle> methodHandles = new ConcurrentHashMap<>();
//
//    public Object invoke(Object service, String methodName, Object[] args) throws Throwable {
//        String key = service.getClass().getName() + "#" + methodName;
//        MethodHandle handle = methodHandles.computeIfAbsent(key, k -> {
//            try {
//                ClassReader cr = new ClassReader(service.getClass().getName());
//                ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
//                cr.accept(new MethodDiscoveryVisitor(cw, methodName), 0);
//                return MethodHandles.lookup().unreflect(
//                        service.getClass().getMethod(methodName, getParamTypes(args))
//                );
//            } catch (Exception e) {
//                throw new RuntimeException(e);
//            }
//        });
//        return handle.invokeWithArguments(args);
//    }
//
//    private Class<?>[] getParamTypes(Object[] args) {
//        return Arrays.stream(args)
//                .map(Object::getClass)
//                .toArray(Class[]::new);
//    }
//
//    static class MethodDiscoveryVisitor extends ClassVisitor {
//        private final String targetMethod;
//
//        public MethodDiscoveryVisitor(ClassWriter cw, String methodName) {
//            super(ASM9, cw);
//            this.targetMethod = methodName;
//        }
//
//        @Override
//        public MethodVisitor visitMethod(int access, String name, String descriptor,
//                                         String signature, String[] exceptions) {
//            if (name.equals(targetMethod)) {
//                // 生成优化后的调用逻辑
//                MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions);
//                return new OptimizeMethodVisitor(mv);
//            }
//            return super.visitMethod(access, name, descriptor, signature, exceptions);
//        }
//    }
//
//    static class OptimizeMethodVisitor extends MethodVisitor {
//        public OptimizeMethodVisitor(MethodVisitor mv) {
//            super(ASM9, mv);
//        }
//
//        // 在这里插入性能优化相关的字节码逻辑
//    }
//}